\subsection{WebService}

\subsubsection{Partie Serveur}

\paragraph*{}
Une fonctionnalité demandée pour ce projet est la réalisation d'un mode \textit{deconnecté}, c'est à dire une version qui marche sans qu'aucune donnée concernant la carte ne soit stockée directement sur l'appareil. La solution proposée pour ce projet a été la mise en place d'une WebService, reprenant le fonctionnement de l'application Android, en profitant de la puissance de calcul du serveur, et retournant rapidement les données à l'appareil sous format Json. 

\paragraph*{}
Nous avions déjà la librairie de calculs géométrique, la création du graphe et la recherche de chemin en Java, donc nous avons décidé de créer notre WebService en Java, et plus précisément, en JEE, en utilisant un serveur d'applications JBOSS. Nous avons fait au plus simple, c'est à dire créer un projet ne contenant que des servlets, et lui fournir les classes que nous avions créé pour le projet Android.

\begin{center}
\includegraphics[height=3cm]{images/jboss.jpg}
\end{center}


\paragraph*{}
Ce WebService fournit ces principales fonctionnalités :
\begin{enumerate}

\item La gestion de version de la carte actuelle sur le serveur, afin de ne pas redemander au smartphone de retélécharger la carte s'il a déjà la version la plus récente de celle-ci\\
\url{/WebServiceSIG/?version=1}

\item Le téléchargement de la carte du campus, et du batiment au format XML\\
\url{/WebServiceSIG/GetBatiment} et \url{/WebServiceSIG/GetMap}

\item Le téléchargement des graphes créés à partir des XML, cette fois ci transmis au format Json grâce à la librairie \textit{JackSon}\\
\url{/WebServiceSIG/?graphe=1} et \url{/WebServiceSIG/?graphe=1\&batiment=1}


\item La recherche de chemin entre deux points, \textbf{source} et \textbf{destination}, qui retourne le chemin au format Json\\
\url{/WebServiceSIG/chemin?source=ID\_SOURCE\&destination=ID\_DESTINATION} (possibilité d'ajouter \textbf{batiment=1})

\item La recherche de la localisation dans le campus ou dans le batiment\\
\url{/WebServiceSIG/localisation?x=X\&y=Y} (possibilité d'ajouter \textbf{batiment=1})


\end{enumerate}

\subsubsection{Partie Android}

\paragraph*{}
Le smartphone Android va, lorsqu'il passe en mode connecté, demander l'adresse du serveur à l'utilisateur (vu que nous n'avons pas de serveur fixe pour les tests), puis lui demander la version actuelle de la carte. Si il ne connait pas encore la carte, ou que sa version est inférieur à celle en ligne, il va efféctuer la demande du graphe du campus, et du batiment, qu'il va stocker en local, puis parser pour l'afficher. Lors de la recherche de chemin entre deux points, il va envoyer une requete au serveur, en lui fournissant l'ID\_SOURCE, donné par l'arbre de localisation, et l'ID\_DESTINATION, récupéré via le choix d'un batiment recherché par l'utilisateur. Puis, lorsqu'il aura reçu le chemin en question, l'affichera sur le modèle 3D.

\begin{center}
\includegraphics[height=3cm]{images/json_android.jpeg}
\end{center}
